/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * dlgRegistroProductos.java
 *
 * Created on 18/10/2011, 02:48:29 PM
 */

package visual.Ingreso;

import bentity.beCombo;
import bentity.beItem;
import bentity.beProducto;
import bentity.beProveedor;
import bentity.beUsuario;
import blogic.blHelper;
import blogic.blLog;
import blogic.blProducto;
import blogic.blProveedor;
import java.awt.Dimension;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListModel;
import javax.swing.JOptionPane;
import visual.Seguridad.visualHelper;

/**
 *
 * @author giulio
 */
public class dlgRegistroProductos extends javax.swing.JDialog {
    beUsuario usuario=null;

    /** Creates new form dlgRegistroProductos */
    public dlgRegistroProductos(java.awt.Frame parent, boolean modal,beUsuario usuario) {
        super(parent, modal);
        initComponents();
        this.setModal(true);
        this.usuario=usuario;
        
        try{
            blHelper blh=new blHelper();
            ArrayList<beCombo> comboObjeto=new ArrayList<beCombo>();

            comboObjeto=(new blProducto()).llenarComboTipoProducto(true,"Elija un tipo producto");
            this.cboTipoProd.setModel(blh.ComboBoxItem(comboObjeto));

            comboObjeto=(new blProveedor()).llenarComboProveedor(false,"");
            this.lstProveedores.setModel(blh.ListItem(comboObjeto));

            this.setResizable(false);
            this.setAlwaysOnTop(true);
            visualHelper.centrarDialogoEnPantalla(this);

        }catch(Exception e){}
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        lblTitulo = new javax.swing.JLabel();
        pnlRegistro = new javax.swing.JPanel();
        txtCosto = new javax.swing.JTextField();
        jScrollPane4 = new javax.swing.JScrollPane();
        txtDescripcion = new javax.swing.JTextArea();
        lblDescripcion = new javax.swing.JLabel();
        txtNombre = new javax.swing.JTextField();
        lblNombre = new javax.swing.JLabel();
        cboTipoProd = new javax.swing.JComboBox();
        lblTipoProd = new javax.swing.JLabel();
        lblProveedor = new javax.swing.JLabel();
        lblCosto = new javax.swing.JLabel();
        jScrollPane3 = new javax.swing.JScrollPane();
        lstProveedores = new javax.swing.JList();
        btnLimpiar = new javax.swing.JButton();
        lblBusqFila = new javax.swing.JLabel();
        lblBusqFila1 = new javax.swing.JLabel();
        lblBusqFila2 = new javax.swing.JLabel();
        lblBusqFila3 = new javax.swing.JLabel();
        btnRegistrar = new javax.swing.JButton();
        btnCancelar = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setAlwaysOnTop(true);
        setMinimumSize(new java.awt.Dimension(425, 570));
        setResizable(false);
        getContentPane().setLayout(null);

        lblTitulo.setFont(new java.awt.Font("DejaVu Sans", 0, 36));
        lblTitulo.setForeground(new java.awt.Color(0, 0, 0));
        lblTitulo.setText("Registro de productos");
        getContentPane().add(lblTitulo);
        lblTitulo.setBounds(10, 10, 398, 43);

        pnlRegistro.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)), "Registro", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Dialog", 0, 14))); // NOI18N
        pnlRegistro.setLayout(null);

        txtCosto.setFont(new java.awt.Font("Dialog", 0, 12));
        txtCosto.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                txtCostoActionPerformed(evt);
            }
        });
        txtCosto.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                txtCostoKeyTyped(evt);
            }
        });
        pnlRegistro.add(txtCosto);
        txtCosto.setBounds(140, 170, 250, 25);

        txtDescripcion.setColumns(20);
        txtDescripcion.setFont(new java.awt.Font("Dialog", 0, 12));
        txtDescripcion.setLineWrap(true);
        txtDescripcion.setRows(5);
        txtDescripcion.setWrapStyleWord(true);
        txtDescripcion.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                txtDescripcionKeyTyped(evt);
            }
        });
        jScrollPane4.setViewportView(txtDescripcion);

        pnlRegistro.add(jScrollPane4);
        jScrollPane4.setBounds(140, 70, 250, 90);

        lblDescripcion.setFont(new java.awt.Font("Dialog", 0, 12));
        lblDescripcion.setForeground(new java.awt.Color(0, 0, 0));
        lblDescripcion.setText("Descripción");
        pnlRegistro.add(lblDescripcion);
        lblDescripcion.setBounds(10, 70, 73, 15);

        txtNombre.setFont(new java.awt.Font("Dialog", 0, 12));
        txtNombre.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                txtNombreKeyTyped(evt);
            }
        });
        pnlRegistro.add(txtNombre);
        txtNombre.setBounds(140, 30, 250, 25);

        lblNombre.setFont(new java.awt.Font("Dialog", 0, 12));
        lblNombre.setForeground(new java.awt.Color(0, 0, 0));
        lblNombre.setText("Nombre");
        pnlRegistro.add(lblNombre);
        lblNombre.setBounds(10, 30, 49, 15);

        cboTipoProd.setFont(new java.awt.Font("Dialog", 0, 12));
        cboTipoProd.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
        cboTipoProd.setSelectedItem(null);
        cboTipoProd.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cboTipoProdActionPerformed(evt);
            }
        });
        pnlRegistro.add(cboTipoProd);
        cboTipoProd.setBounds(140, 210, 250, 25);

        lblTipoProd.setFont(new java.awt.Font("Dialog", 0, 12));
        lblTipoProd.setForeground(new java.awt.Color(0, 0, 0));
        lblTipoProd.setText("Tipo de producto");
        pnlRegistro.add(lblTipoProd);
        lblTipoProd.setBounds(10, 210, 107, 15);

        lblProveedor.setFont(new java.awt.Font("Dialog", 0, 12));
        lblProveedor.setForeground(new java.awt.Color(0, 0, 0));
        lblProveedor.setText("Proveedores");
        pnlRegistro.add(lblProveedor);
        lblProveedor.setBounds(10, 250, 100, 15);

        lblCosto.setFont(new java.awt.Font("Dialog", 0, 12));
        lblCosto.setForeground(new java.awt.Color(0, 0, 0));
        lblCosto.setText("Precio Venta (S/.)");
        pnlRegistro.add(lblCosto);
        lblCosto.setBounds(10, 170, 120, 15);

        lstProveedores.setFont(new java.awt.Font("Dialog", 0, 12));
        lstProveedores.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        jScrollPane3.setViewportView(lstProveedores);

        pnlRegistro.add(jScrollPane3);
        jScrollPane3.setBounds(140, 250, 250, 130);

        btnLimpiar.setBackground(new java.awt.Color(240, 235, 226));
        btnLimpiar.setFont(new java.awt.Font("Dialog", 0, 12));
        btnLimpiar.setForeground(new java.awt.Color(0, 0, 0));
        btnLimpiar.setText("Limpiar");
        btnLimpiar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnLimpiarActionPerformed(evt);
            }
        });
        pnlRegistro.add(btnLimpiar);
        btnLimpiar.setBounds(290, 390, 100, 27);

        lblBusqFila.setFont(new java.awt.Font("Dialog", 0, 12)); // NOI18N
        lblBusqFila.setForeground(java.awt.Color.red);
        lblBusqFila.setText("(*)");
        pnlRegistro.add(lblBusqFila);
        lblBusqFila.setBounds(60, 30, 30, 15);

        lblBusqFila1.setFont(new java.awt.Font("Dialog", 0, 12)); // NOI18N
        lblBusqFila1.setForeground(java.awt.Color.red);
        lblBusqFila1.setText("(*)");
        pnlRegistro.add(lblBusqFila1);
        lblBusqFila1.setBounds(120, 170, 30, 15);

        lblBusqFila2.setFont(new java.awt.Font("Dialog", 0, 12)); // NOI18N
        lblBusqFila2.setForeground(java.awt.Color.red);
        lblBusqFila2.setText("(*)");
        pnlRegistro.add(lblBusqFila2);
        lblBusqFila2.setBounds(120, 200, 30, 30);

        lblBusqFila3.setFont(new java.awt.Font("Dialog", 0, 12)); // NOI18N
        lblBusqFila3.setForeground(java.awt.Color.red);
        lblBusqFila3.setText("(*)");
        pnlRegistro.add(lblBusqFila3);
        lblBusqFila3.setBounds(90, 250, 30, 15);

        getContentPane().add(pnlRegistro);
        pnlRegistro.setBounds(10, 50, 400, 430);

        btnRegistrar.setBackground(new java.awt.Color(240, 235, 226));
        btnRegistrar.setFont(new java.awt.Font("Dialog", 0, 12));
        btnRegistrar.setForeground(new java.awt.Color(0, 0, 0));
        btnRegistrar.setText("Registrar");
        btnRegistrar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnRegistrarActionPerformed(evt);
            }
        });
        getContentPane().add(btnRegistrar);
        btnRegistrar.setBounds(60, 490, 110, 27);

        btnCancelar.setBackground(new java.awt.Color(240, 235, 226));
        btnCancelar.setFont(new java.awt.Font("Dialog", 0, 12));
        btnCancelar.setForeground(new java.awt.Color(0, 0, 0));
        btnCancelar.setText("Cancelar");
        btnCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCancelarActionPerformed(evt);
            }
        });
        getContentPane().add(btnCancelar);
        btnCancelar.setBounds(240, 490, 110, 27);

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void cboTipoProdActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cboTipoProdActionPerformed
        // TODO add your handling code here:
}//GEN-LAST:event_cboTipoProdActionPerformed

    private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelarActionPerformed
        this.dispose();
}//GEN-LAST:event_btnCancelarActionPerformed

    private void btnRegistrarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnRegistrarActionPerformed

        
        try {
            beProducto pd = leerDatosProducto();
            if(pd==null) return;
            int idProducto=registrarProducto(pd);
            ArrayList<Integer> arrProv = leerProveedores();
            pd.setIdProducto(idProducto);
            if(registrarProductoXProveedor(pd, arrProv)==-1);
            int rLog=(new blLog().registrarLog(usuario.getIdUsuario(), usuario.getCargo(), "Se ha registrado el producto con codigo "+idProducto));
            visualHelper.mostrarMensajeSatisfaccion("Se registró el producto satisfactoriamente");
            this.dispose();
        } catch (Exception ex) {
            ex.printStackTrace();
            visualHelper.mostrarMensajeError("Ha ocurrido un error. Inténtelo nuevamente");
        }
}//GEN-LAST:event_btnRegistrarActionPerformed

    private void txtCostoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txtCostoActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_txtCostoActionPerformed

    private void btnLimpiarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnLimpiarActionPerformed
        this.limpiarCampos();
    }//GEN-LAST:event_btnLimpiarActionPerformed

    private void txtCostoKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtCostoKeyTyped
        String strCosto = this.txtCosto.getText();
        int i = strCosto.indexOf(".");
        if (i==-1){
            if (strCosto.length() > 7)
                visualHelper.soloPuntos(evt);
            else
                visualHelper.soloDigitosYPunto(evt);
        }
        else{
            if(strCosto.length()>(i+4)){
                visualHelper.ningunCaracterEnTextField(evt);
            }
            else{
            visualHelper.soloDigitosEnTextField(evt);
            }
        }

    }//GEN-LAST:event_txtCostoKeyTyped

    private void txtNombreKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtNombreKeyTyped
        String strNombre = this.txtNombre.getText();
        if (strNombre.length() >= 50)
            visualHelper.ningunCaracterEnTextField(evt);
        else
            visualHelper.soloNombres(evt);
    }//GEN-LAST:event_txtNombreKeyTyped

    private void txtDescripcionKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtDescripcionKeyTyped
        String strDescripcion = this.txtDescripcion.getText();
        if (strDescripcion.length() >= 200)
            visualHelper.ningunCaracterEnTextField(evt);
        else{
            visualHelper.soloNombres(evt);
        }
    }//GEN-LAST:event_txtDescripcionKeyTyped

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            beUsuario u=null;

            public void run() {
                dlgRegistroProductos dialog = new dlgRegistroProductos(new javax.swing.JFrame(), true,u);
                dialog.addWindowListener(new java.awt.event.WindowAdapter() {
                    public void windowClosing(java.awt.event.WindowEvent e) {
                        System.exit(0);
                    }
                });
                dialog.setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnCancelar;
    private javax.swing.JButton btnLimpiar;
    private javax.swing.JButton btnRegistrar;
    private javax.swing.JComboBox cboTipoProd;
    private javax.swing.JScrollPane jScrollPane3;
    private javax.swing.JScrollPane jScrollPane4;
    private javax.swing.JLabel lblBusqFila;
    private javax.swing.JLabel lblBusqFila1;
    private javax.swing.JLabel lblBusqFila2;
    private javax.swing.JLabel lblBusqFila3;
    private javax.swing.JLabel lblCosto;
    private javax.swing.JLabel lblDescripcion;
    private javax.swing.JLabel lblNombre;
    private javax.swing.JLabel lblProveedor;
    private javax.swing.JLabel lblTipoProd;
    private javax.swing.JLabel lblTitulo;
    private javax.swing.JList lstProveedores;
    private javax.swing.JPanel pnlRegistro;
    private javax.swing.JTextField txtCosto;
    private javax.swing.JTextArea txtDescripcion;
    private javax.swing.JTextField txtNombre;
    // End of variables declaration//GEN-END:variables

    private beProducto leerDatosProducto() throws Exception{
        blHelper blh=new blHelper();

        //NULOS

        if(this.txtNombre.getText().equals("")) {
            visualHelper.mostrarMensajeAdvertencia("Ingrese un nombre");
            return null;
        }

        if(this.txtCosto.getText().equals("")) {
            visualHelper.mostrarMensajeAdvertencia("Ingrese el precio de venta");
            return null;
        }

        //CONTENIDO
        
        if(!blh.cadenaSoloDouble(this.txtCosto.getText())){
            visualHelper.mostrarMensajeAdvertencia("Ingrese un precio de venta válido");
            return null;
        }
        
        if(Double.parseDouble(this.txtCosto.getText())<0) {
            visualHelper.mostrarMensajeAdvertencia("Ingrese un costo válido");
            return null;
        }

        if(this.cboTipoProd.getSelectedIndex()<=0) {
            visualHelper.mostrarMensajeAdvertencia("Elija un tipo de producto");
            return null;
        }
        if(this.lstProveedores.isSelectionEmpty()) {
            visualHelper.mostrarMensajeAdvertencia("Elija un proveedor");
            return null;
        }

        //LONGITUD

        if(this.txtNombre.getText().length()>50){
            visualHelper.mostrarMensajeAdvertencia("El campo Nombre cuenta con máximo 50 caracteres");
            return null;
        }

        if(this.txtDescripcion.getText().length()>200){
            visualHelper.mostrarMensajeAdvertencia("El campo Descripcion cuenta con máximo 200 caracteres");
            return null;
        }

        if(this.txtCosto.getText().length()>15){
            visualHelper.mostrarMensajeAdvertencia("El campo costo es demasiado largo");
            return null;
        }

        String nombre=this.txtNombre.getText();
        String descripcion=this.txtDescripcion.getText();
        Double costo= Double.parseDouble(this.txtCosto.getText());
        costo=Math.rint(costo*10000)/10000;
        int tipoProducto=((beItem)this.cboTipoProd.getSelectedItem()).getId();
        int estado=(new blProducto()).dameIdEstadoProducto(beProducto.nombreActivo);
        
        beProducto pd=new beProducto(-1,nombre,descripcion,costo,tipoProducto,estado);

        return pd;
    }

    private int registrarProducto(beProducto pd) throws Exception{
        int result=visualHelper.mostrarPreguntaSiNo("¿Está seguro de guardar el producto?");
        if(result==JOptionPane.NO_OPTION){ 
            return -1;
        }

        result=(new blProducto()).registrarProducto(pd);
        return result;

    }

    private ArrayList<Integer> leerProveedores() throws Exception{
        ArrayList<Integer> arrIdProvs=new ArrayList<Integer>();
        
        for(int i=0;i<=this.lstProveedores.getLastVisibleIndex();i++){
            if(this.lstProveedores.isSelectedIndex(i)){
                arrIdProvs.add(((beItem)this.lstProveedores.getModel().getElementAt(i)).getId());
            }
        }

        return arrIdProvs;
    }

    private int registrarProductoXProveedor(beProducto pd, ArrayList<Integer> arrProv) throws Exception{
            
        
        (new blProducto()).registrarProductoXProveedor(pd, arrProv);
        return 0;
    }

    private void limpiarCampos() {
        this.txtNombre.setText("");
        this.txtDescripcion.setText("");
        this.txtCosto.setText("");
        this.cboTipoProd.setSelectedIndex(0);
        this.lstProveedores.clearSelection();
    }

}
